/**
 * 插件基类
 * 所有插件都应该继承这个基类并实现相关方法
 */
export class BasePlugin {
    constructor(editor, options = {}) {
        this.editor = editor
        this.options = options
        this.enabled = false
        this.name = this.constructor.name
    }

    /**
     * 插件初始化方法
     * 子类应该重写此方法来实现具体的初始化逻辑
     */
    initialize() {
        throw new Error(`Plugin ${this.name} must implement initialize() method`)
    }

    /**
     * 启用插件
     */
    enable() {
        if (this.enabled) return
        this.enabled = true
        this.onEnable()
        this.editor.emit('plugin:enabled', { plugin: this.name })
    }

    /**
     * 禁用插件
     */
    disable() {
        if (!this.enabled) return
        this.enabled = false
        this.onDisable()
        this.editor.emit('plugin:disabled', { plugin: this.name })
    }

    /**
     * 插件启用时的回调
     * 子类可以重写此方法来实现启用时的逻辑
     */
    onEnable() {
        // 默认实现为空，子类可以重写
    }

    /**
     * 插件禁用时的回调
     * 子类可以重写此方法来实现禁用时的逻辑
     */
    onDisable() {
        // 默认实现为空，子类可以重写
    }

    /**
     * 销毁插件
     * 清理资源，移除事件监听器等
     */
    destroy() {
        this.disable()
        this.onDestroy()
    }

    /**
     * 插件销毁时的回调
     * 子类可以重写此方法来实现销毁时的清理逻辑
     */
    onDestroy() {
        // 默认实现为空，子类可以重写
    }

    /**
     * 获取插件信息
     */
    getInfo() {
        return {
            name: this.name,
            enabled: this.enabled,
            options: this.options
        }
    }
}